home *** CD-ROM | disk | FTP | other *** search
/ TeX 1995 July / TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO / graphics / circuit_macros / libcct.m4 < prev    next >
Text File  |  1994-03-13  |  10KB  |  235 lines

  1. divert(-1)
  2.    libcct.m4
  3.                                 and gpic circuit macros:
  4.    m4 <path>/libcct.m4 <diag>.m4 | dpic [-p] [-t] > <diag>.tex , or
  5.    m4 <path>/libcct.m4 <diag>.m4 | gpic [-t] > <diag>.tex
  6.  
  7. define(`HOMELIB_',`/u/aplevich/lib')
  8. ifdef(`dir_',,`include(HOMELIB_/libgen.m4)')
  9. divert(-1)
  10.                                 Circuit constructs
  11. define(`par_',`[Start:Here
  12.   line from Start + vec_(0,$3/2) to Start + vec_(0,-($3/2))
  13.   move to Start + vec_(0,$3/2);  $1
  14.   move to Start + vec_(0,-($3/2)); $2
  15.   line to rvec_(0,$3)
  16. End: last line.c] with .Start at Here
  17.   move to last [].End')
  18.  
  19. define(`eleminit_',`ifelse(`$1',,`eleng=elen_',
  20.    `rpoint_(`$1') dnl
  21.    eleng=sqrt(elendx*elendx + elendy*elendy)' )' dnl
  22.    ) dnl
  23.  
  24. define(`resistor',`eleminit_(`$1')
  25.    define(`v_',`dimen_/12')define(`h_',`dimen_/24')dnl
  26.  { line to rvec_(eleng/2-6*h_,0) then to rvec_(eleng/2-5*h_, v_)\
  27.    then to rvec_(eleng/2-3*h_,-v_) then to rvec_(eleng/2-1*h_, v_)\
  28.    then to rvec_(eleng/2+1*h_,-v_) then to rvec_(eleng/2+3*h_, v_)\
  29.    then to rvec_(eleng/2+5*h_,-v_) then to rvec_(eleng/2+6*h_,0)\
  30.    then to rvec_(eleng,0) }
  31.  { [ box invis ht_ dimen_/6 wid_ dimen_/2 ] with .c at rvec_(eleng/2,0) }
  32.    line to rvec_(eleng,0) invis ')
  33.  
  34. define(`iresistor',`eleminit_(`$1')
  35.  {arrow to rvec_(edel_+dimen_/5,0)}; resistor(`$1')')
  36.  
  37.                                 Inductor coefficients
  38. define(`d1_',dimen_/10)
  39. define(`ct_',Cos(25))define(`st_',Sin(25))
  40. define(`c2t_',Cos(50))define(`s2t_',Sin(50))
  41.                                 Wide inductor
  42. define(`Inductor',`eleminit_(`$1')
  43.  { line from rvec_(eleng,0) to rvec_(eleng-(eleng-(6*c2t_+2*ct_)*d1_)/2,0)
  44.    arc ccw to rvec_(vscal_(d1_,-ct_-c2t_,st_-s2t_)) rad d1_ \
  45.       with .c at rvec_(vscal_(d1_,-ct_,st_))
  46.    arc ccw to rvec_(vscal_(d1_,-2*c2t_,0)) rad d1_ \
  47.       with .c at rvec_(vscal_(d1_,-c2t_,s2t_))
  48.    arc ccw to rvec_(vscal_(d1_,-2*c2t_,0)) rad d1_ \
  49.       with .c at rvec_(vscal_(d1_,-c2t_,s2t_))
  50.    arc ccw to rvec_(vscal_(d1_,-ct_-c2t_,s2t_-st_)) rad d1_ \
  51.       with .c at rvec_(vscal_(d1_,-c2t_,s2t_))
  52.    line to rvec_(-(eleng-(6*c2t_+2*ct_)*d1_)/2,0) }
  53.    {[ box invis ht_ (1+s2t_)*d1_ wid_ (6*c2t_+2)*d1_ ] \
  54.       with .c at rvec_(eleng/2,(st_-s2t_/2+1/2)*d1_)}
  55.    line to rvec_(eleng,0) invis')
  56.  
  57. define(`iInductor',`eleminit_(`$1')
  58.  {arrow to rvec_(edel_+dimen_/5,0)}; Inductor(`$1')')
  59.  
  60.                                 Narrow inductor
  61. define(`inductor',`eleminit_(`$1')
  62.  { line to rvec_(eleng/2-dimen_/4,0)
  63.   {arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)
  64.    arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)
  65.    arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)
  66.    arc cw rad dimen_/16 to rvec_(dimen_/8,0) at rvec_(dimen_/16,0)}
  67.    line from rvec_(dimen_/2,0) to rvec_(eleng/2+dimen_/4,0) }
  68.    {[ box invis ht_ dimen_/16 wid_ dimen_/2 ] \
  69.       with .c at rvec_(eleng/2,dimen_/32)}
  70.    line to rvec_(eleng,0) invis')
  71.  
  72. define(`iinductor',`eleminit_(`$1')
  73.  {arrow to rvec_(edel_+dimen_/5,0)}; inductor(`$1')')
  74.  
  75. define(`capacitor',`eleminit_(`$1')
  76.    { line to rvec_(eleng/2-dimen_*1/24,0)
  77.    {{line from rvec_(0,-dimen_/6) to rvec_(0,dimen_/6)}
  78.     up__
  79.     arc cw rad dimen_*2/3 from rvec_(dimen_/12,-dimen_/6)\
  80.                                 to rvec_(dimen_/12, dimen_/6) }
  81.    line from rvec_(dimen_*(1/12+3.872983348/6-2/3),0)\
  82.                                 to rvec_(eleng/2+dimen_*1/24,0)}
  83.    {[ box invis ht_ dimen_/3 wid_ dimen_/12 ] with .c at rvec_(eleng/2,0)}
  84.    line to rvec_(eleng,0) invis')
  85.  
  86. define(`icapacitor',`eleminit_(`$1')
  87.    {arrow to rvec_(dimen_/5,0)}; capacitor(`$1')')
  88.  
  89.                                 (Voltage) source
  90. define(`source',`eleminit_(`$1')
  91.   {line to rvec_(eleng/2-dimen_/4,0)}
  92.   {[circle rad dimen_/4] with .c at rvec_(eleng/2,0)}
  93.   {line from rvec_(eleng/2+dimen_/4,0) to rvec_(eleng,0)}
  94.    line to rvec_(eleng,0) invis')
  95.  
  96.                                 Current source
  97. define(`csource',`eleminit_(`$1')
  98.    {arrow from rvec_(eleng/2-dimen_*3/16,0)\
  99.     to rvec_(eleng/2+dimen_*3/16,0)}
  100.    source(`$1') ')
  101.  
  102.                                 Controlled source
  103. define(`consource',`eleminit_(`$1')
  104.   {line to rvec_(eleng/2-dimen_/6,0)
  105.     line to rvec_(dimen_/3/sqrt(2),dimen_/3/sqrt(2))\
  106.     then to rvec_(2*dimen_/3/sqrt(2),0)\
  107.     then to rvec_(dimen_/3/sqrt(2),-dimen_/3/sqrt(2))\
  108.     then to Here
  109.     line from rvec_(2*dimen_/3/sqrt(2),0) to\
  110.     rvec_(2*dimen_/3/sqrt(2)+eleng/2-dimen_/6,0)}
  111.    {[ box invis ht_ dimen_/3/sqrt(2) wid_ dimen_/3/sqrt(2) ] \
  112.                                 with .c at rvec_(eleng/2,0)}
  113.    line to rvec_(eleng,0) invis')
  114.  
  115.                                 D.C. voltage
  116. define(`battery',`eleminit_(`$1')
  117.   { line to rvec_(eleng/2-dimen_/24,0)
  118.     {line from rvec_(0,-dimen_/8) to rvec_(0,dimen_/8)}
  119.     move to rvec_(dimen_/12,0)
  120.     {line from rvec_(0,-dimen_/4) to rvec_(0,dimen_/4)}
  121.     line to rvec_(eleng/2-dimen_/24,0) }
  122.   {[ box invis ht_ dimen_/2 wid_ dimen_/12 ] with .c at rvec_(eleng/2,0)}
  123.   line to rvec_(eleng,0) invis ')
  124.  
  125.                                 Box element
  126. define(`ebox',`eleminit_(`$1')
  127.    {line to rvec_(eleng/2-dimen_/4,0)
  128.       line from rvec_(0,-dimen_/10) to rvec_(0,dimen_/10)\
  129.       then to rvec_(dimen_/2,dimen_/10)\
  130.       then to rvec_(dimen_/2,-dimen_/10)\
  131.       then to rvec_(0,-dimen_/10)}
  132.    {line from rvec_(eleng/2+dimen_*1/4,0) to rvec_(eleng,0)}
  133.   {[ box invis ht_ dimen_/5 wid_ dimen_/2 ] with .c at rvec_(eleng/2,0)}
  134.    line to rvec_(eleng,0) invis ')
  135.  
  136.                      Gap with dots, e.g. down _; gap(linewid/2); rlabel(+,v_1,-)
  137. define(`gap',`eleminit_(`$1')
  138.   { dot; move to rvec_(eleng,0); dot }
  139.   {[ box invis ht_ 0 wid_ eleng-dimen_/4 ] with .c at rvec_(eleng/2,0)}
  140.   line invis to rvec_(eleng,0) ')
  141.  
  142.    Standard ground symbol, down from current postion, wd dimen_/3 ht dimen_*9/24
  143. define(`grnd_',`{dnl
  144.  {line from rvec_(-dimen_/6,0) to rvec_(dimen_/6,0)}
  145.  {line from rvec_(-dimen_/9,-dimen_/24) to rvec_(dimen_/9,-dimen_/24)}
  146.  {line from rvec_(-dimen_/14,-dimen_/12) to rvec_(dimen_/14,-dimen_/12)}
  147.  }')
  148. define(`ground',`{right_; line to rvec_(0,-dimen_/4); grnd_;}')
  149. define(`grnd',`{right_; grnd_;}')
  150.  
  151.                                 Switch
  152. define(`switch',`eleminit_(`$1')
  153.  {line to rvec_(eleng/2-dimen_/6,0)\
  154.     then to rvec_(eleng/2+dimen_/12,dimen_/4)}
  155.  {line from rvec_(eleng/2+dimen_/6,0) to rvec_(eleng,0)}
  156.  line to rvec_(eleng,0) invis')
  157.  
  158.                                 Closing switch
  159. define(`cswitch',`switch(`$1'); dnl
  160.  {move to last line.start + vec_(eleng/2-dimen_/6,0)
  161.   arc <- up__ ccw from rvec_(vscal_(dimen_/4,Cos(20),-Sin(20)))\
  162.     to rvec_(vscal_(dimen_/4,Cos(60),Sin(60)))}
  163.  {[ box invis ht_ dimen_/4*(Sin(20)+Sin(60)) wid_ dimen_/4*(Cos(20)-Cos(60))]\
  164.      with .c at 0.5<last arc.start, last arc.end>} ')
  165.  
  166.                                 Opening switch
  167. define(`oswitch',`switch(`$1'); dnl
  168.  {move to last line.start + vec_(eleng/2-dimen_/6,0)
  169.   arc -> up__ ccw from rvec_(vscal_(dimen_/4,Cos(10),-Sin(10)))\
  170.      to rvec_(vscal_(dimen_/4,Cos(75),Sin(75)))}
  171.  {[ box invis ht_ dimen_/4*(Sin(10)+Sin(75)) wid_ dimen_/4*(Cos(10)-Cos(75))]\
  172.      with .c at 0.5<last arc.start, last arc.end>} ')
  173.  
  174.                                 Amplifiers
  175. define(`amp',`eleminit_(`$1')
  176.   { line to rvec_(edel_,0)}; gamp ')
  177.  
  178. define(`integrator',`eleminit_(`$1')
  179.   line to rvec_(edel_,0); 
  180.   { line from rvec_(edel_,-dimen_/2) to rvec_(   0,-dimen_/2)\
  181.          then to rvec_(   0, dimen_/2)\
  182.          then to rvec_(edel_, dimen_/2)}; gamp(`$1') ')
  183.  
  184.                     Amplifier, dimen_ x dimen_ triangle centred on width elen_
  185.                     triangle in a []
  186. define(`gamp',`eleminit_(`$1')
  187.  {line from rvec_(eleng-edel_,0)\
  188.      to      rvec_(edel_,-dimen_/2)\
  189.      then to rvec_(edel_, dimen_/2)\
  190.      then to rvec_(eleng-edel_,0) }
  191.  { line from rvec_(eleng-edel_,0) to rvec_(eleng,0)}
  192.  {[ box invis ht_ dimen_ wid_ eleng-2*edel_ ] with .c at rvec_(eleng/2,0)}
  193.  line invis to rvec_(eleng,0) ')
  194.  
  195. define(`opamp',`eleminit_(`$1')
  196.   [In1: rvec_(edel_,dimen_/4)
  197.   {ifelse(`$1',,"\small{$-$}",`$1') at In1 ljust_ }
  198.   In2: rvec_(edel_,-dimen_/4)
  199.   {ifelse(`$2',,"\small{$+$}",`$2') at In2  ljust_ }
  200.   gamp(`$1'); Out: Here] with .c at rvec_(eleng/2,0)')
  201.  
  202. define(`delay',`eleminit_(`$1')
  203.  {line to rvec_((eleng-delayrad*5/3)/2,0)
  204.   line from rvec_(delayrad*2/3,-delayrad) to rvec_(0,-delayrad)\
  205.     then to rvec_(0,delayrad) then to rvec_(delayrad*2/3,delayrad)
  206.   {rt_; arc cw rad delayrad to rvec_(0,-2*delayrad) at rvec_(0,-delayrad)}
  207.   move to rvec_(delayrad,-delayrad)
  208.   line to rvec_((eleng-delayrad*5/3)/2,0)}
  209.   {[box invis ht_ delayrad*2 wid_ delayrad*5/3 ] with .c at rvec_(eleng/2,0)}
  210.   line invis to rvec_(eleng,0)')
  211.  
  212.                    labels at centre and both ends of an element dimen_ long
  213. define(`glabel_',`dnl
  214.  ifelse(`$2',,,`{`"$$2$"' at last []$4 $5}')
  215.  ifelse(`$1',,,`{`"$$1$"' at last [].w_+vec_(-dimen_/8,0) $5}')
  216.  ifelse(`$3',,,`{`"$$3$"' at last [].e_+vec_( dimen_/8,0) $5}')
  217.  ')
  218.  
  219.              element labels to the left, right, centre of the current direction
  220. define(`rlabel',`glabel_(`$1',`$2',`$3',.s_,below_)')
  221. define(`llabel',`glabel_(`$1',`$2',`$3',.n_,above_)')
  222. define(`clabel',`glabel_(`$1',`$2',`$3',,)')
  223.  
  224.                                 Size of the central part of
  225.                                 two-terminal elements:
  226. define(`dimen_',`linewid')
  227.                                 Element length:  
  228. define(`elen_',`dimen_*3/2')
  229. define(`edel_',`(eleng-dimen_)/2')
  230.                                 Dots as small circles:
  231. define(`dotrad',0.02)
  232.                                 Delay elements:
  233. define(`delayrad',`0.35*dimen_')
  234. divert
  235.